写在前面
文章主要部分
如果不需要细究
cocoapods
的一些工作细节,那么我们可以直接开始上手集成
来到这里的小伙伴,通常都已经有了使用
cocoapods
的经验,那么废话不多说,我们直接在终端打开目录
$ open ~/.cocoapods/repos
接下来我们可以看到如下目录结构
.
├── Specs # 索引库列表
└── [REPO_NAME] # 索引库名(其中master为cocoapods官方索引库)
└── [SPEC_NAME] # 第三方库名
└── [VERSION] # 第三方库版本
└── [SPEC_NAME].podspec # 第三方库的版本说明文件
根据以上目录我们不难看出,索引库中存着不同名称的索引库,即
spec repo
(没有私有库的话,只有一个master
),在索引库spec repo
目录下才包含各种以第三方库名命名的文件夹如:AFNetworking
,在这些文件夹下包含以不同版本号命名的文件夹如3.0.0等
,再点开就会看到一个诸如AFNetworking.podspec
的文件,那么这个就是有关于AFNetworking
这个库在3.0.0
版本下的描述文件,关于这个目录我们就先了解到这里,并没有任何难点,是不是挺无聊,那么由浅入深,我们接着往下走。
关于cocoapods的一些基本工作原理
我们把cocoapods 想象成一个工具,当我们运行
pod install
的时候,他帮我们做了两件事情,事实上,cocoapods
为我们所有我们看得见看不见的工作,其根本目的就是以下两点:1. 帮我们找到我们需要的库 2. 把我们需要的库集成到我们的工程里面
对于第一件事情,相信绝大多数的人单从字面意思都可以很容易理解,甚至很多人都会进一步思考
cocoapods
究竟是怎么帮我们搜的,那么我们一会就来探究一下cocoapods
是怎么为开发者做到这第一件事情的吧。关于cocoapods为我们做的第二件事情,里面包含着许多的细节性工作,鉴于个人能力目前也不在这个范围内,这里也就无法细述,但并不影响我们接下来的所有工作。
spec repository 描述文件仓库(即索引库)
通常我们指的是cocoapods
项目在GitHub上存放各种第三方库的版本描述文件.podspec
的仓库(称之为索引库),也就是官方Spec Repo ,当你使用cocoapods
时,它就会被clone到你的本地。这个仓库在cocoapods
的设计中起到了关键的一环。
当你用cocoapods
项工程中导入某个库的的时候,首先要做的事情就是寻找你在.Podfile
文件里添加的相关库的在哪里,那么我们是不是应该要想,去哪里找呢?答案呢当然是clone到本地的cocoapods
索引库spec repo
了。
现在我们就简单来扒一下我们每次在终端执行pod install
究竟做了些什么:
$ pod install
到
Podfile
中提取pod 'AFNetworking', '~> 1.1.1'
到clone到本地的索引库
spec repo
中搜索名为AFNetworking
的文件夹在找到的
AFNetworking
目录下寻找名为1.1.1
的文件夹根据
1.1.1
文件夹中的AFNetworking.podspec
版本描述文件中的具体信息去相应的代码仓库下载or拷贝AFNetworking 1.1.1
版本的相关代码将
AFNetworking 1.1.1
版本的代码集成到我们工程中
code repository (第三方库的代码仓库)
code repo
是各种第三方库的实际代码存放仓库,一般托管在GitHub
、gitlab
等代码托管网站或私有服务器上。该仓库中附带也会包含一个当前库的版本描述文件.podspec
文件,.podspec
文件中包含该库当前版本的详细描述,后面会做详细解释说明。
安装
cocopods
如果没有安装的同学,网上有很多教程,随便搜就可以找到很多。
在
GitHub、gitlab
等网站/服务器上创建私有的代码仓库code repo
,比如我们创建一个VeryNBKit
仓库在代码托管网站上创建私有的代码仓库,用来保存你的私有库中的代码。
在
GitHub、gitlab
等网站/服务器上创建私有索引库spec repo
在前面的小知识中,我们提到在
~/.cocoapods/repos
目录下包含有不同名称的索引库,其中master
为cocoapods
官方的索引库,也就是绝大多数公有库的索引库,如果我们写的私有库代码都非常牛逼,又不想开源,又想使用cocoapods
来管理我们的私有代码库,那么我们干脆就把我们的私有索引库命名为VeryNBSpecs
。到此为止,我们的两个重要的仓库就创建完毕了,接下来的工作将需要更加细心了。
将仓库clone到本地
$ git clone https://github.com/YourName/VeryNBKit.git
在仓库根目录创建Xcode工程
创建VeryNBKit 项目工程
在Xcode中编写相关代码
编写VeryNBKit 中那些牛逼的代码
创建 VeryNBKit.podspec 文件 (VeryNBKit为牛逼的库名)
我们知道,当我们光写完这些牛逼的代码,上传到代码托管服务器上之后,
cocoapods
并不知道我们这些牛逼的代码在哪里,如果我们在Podflie中写到pod 'VeryNBKit', '~> 1.1.1'
,然后在终端执行pod install
,其实cocoapods
并不能认识(找到)我们的牛逼代码,这么牛逼的代码你不认识,那逼没法装下去了呀,这可是不行的!!!我们知道,
cocoapods
必须要通过.podspec
文件来定位我们牛逼的代码在哪里,然后才能把代码拷贝过来集成到我们的工程里,那么废话不说,直接将.podspec
文件甩到cocoapods
脸上看他认识不认识。打开终端,直接来到
VeryNBKit
工程的根目录下,执行如下指令,将会为我们创建VeryNBKit.podspec
文件。$ pod spec create VeryNBKit
现在
.podspec
文件有了,接下来在这个文件中加点信息,告诉cocoapods
在哪里找我们的VeryNBKit
。编辑 VeryNBKit.podspec 文件
Pod::Spec.new do |s| s.name = "VeryNBKit" # 项目名称 s.version = "0.0.1" # 版本号 与 你仓库的 标签号 对应 s.license = "MIT" # 开源证书 s.summary = "A delightful TextField of VeryNBKit" # 项目简介 s.homepage = "https://github.com/YourName/VeryNBKit" # 你的主页 s.source = { :git => "https://github.com/YourName/VeryNBKit.git", :tag => "#{s.version}" }#你的仓库地址,不能用SSH地址 s.source_files = "VeryNBKit/VeryNBKit/*.{h,m}"" # 你代码的位置,以上路径以.podspec文件所在位置为根目录,一直到实际代码所在位置为止,说明如下 # VeryNBKit/VeryNBKit/*.{h,m} # VeryNBKit/VeryNBKit/**/*.{h,m} # 表示 VeryNBKit/VeryNBKit/ 和 VeryNBKit/VeryNBKit/ 文件夹下所有.h和.m文件,以及其子目录下的.h和.m文件 s.requires_arc = true # 是否启用ARC s.platform = :ios, "7.0" #平台及支持的最低版本 s.frameworks = "UIKit", "Foundation" #支持的框架 # s.dependency = "AFNetworking" # 依赖库 (如有) # User s.author = { "YourName" => "YourName@gmail.com" } # 作者信息 s.social_media_url = "https://YourName.github.io" # 个人主页 end
按照如上内容填好之后,我们需要验证podspec文件
$ pod lib lint
当我们看到如下提示,则说明验证通过了
-> VeryNBKit (0.0.1) - NOTE | xcodebuild: note: Using new build system - NOTE | [iOS] xcodebuild: note: Planning build - NOTE | [iOS] xcodebuild: note: Constructing build description - NOTE | [iOS] xcodebuild: warning: Skipping code signing because the target does not have an Info.plist file. (in target 'App') VeryNBKit passed validation.
VeryNBKit.podspec
验证通过之后,我们就需要把代码上传到代码库了$ git add . $ git commit -m "提交信息" $ git push origin master 给仓库打标签 标签相当于将你的仓库的一个压缩包,用于稳定存储当前版本。 标签号与你在 s.version = "1.0.0"的版本号一致 1.0.0 $ git tag -a XXX -m "发布XXX版本" $ git push origin --tags
发布
VeryNBKit.podspec
将
VeryNBKit.podspec
发布之前,我们是否还记得我们的私有索引库VeryNBSpecs
,没错,如果我们发布到私有库,那么就需要先把我们的VeryNBSpecs
添加到我们的spec repo
列表中去,在终端中执行如下命令:$ pod repo add VeryNBSpecs https://gitlab.com/YourName/VeryNBSpecs.git
完了之后,我们可以打开
~/.cocoapods/repos
$ open ~/.cocoapods/repos
是不是会惊喜的发现,多了一个
VeryNBSpecs
文件夹,没错,就是我们的牛逼代码索引库。最后我们将
VeryNBKit.podspec
push到VeryNBSpecs
索引库$ pod repo push VeryNBSpecs VeryNBKit.podspec
pod搜索一下我们的
VeryNBKit
$ pod search VeryNBKit
搜到了吧,恭喜你,成功了!!!